#ifndef PERSONAJE_H_
#define PERSONAJE_H_
#include "Coordenada.h"
#include "IMovible.h"
#include "IOcupante.h"
#include <string>
#include <map>

using std::string;
using std::map;
typedef void (Coordenada::*metodo_t) ();

class Personaje: public IMovible{
protected:
    bool vive;
    int velocidad;
    Coordenada posicion;
    Coordenada posicionAnterior;
    string direccion;
    map<string, metodo_t> movimientos;    
	
public:
    /* Constructor */
    Personaje();
    /* Destructor */
    virtual ~Personaje();
    /* Devuelve true si el personaje esta vivo, false en caso contrario. */
    bool estaVivo();
    void setDireccion(string dir);
    /* Le asigna la coordenada al personaje. */
    void ubicar(Coordenada coord);
    /* Destruye al personaje. */
    void destruir();
    /* Devuelve la coordenada donde se encuentra el personaje.*/
    Coordenada getPosicion();
    /* Colisiones: la idea es tener una lista de elementos que colisionan
     * en un mismo casillero y llamar desde X al metodo 'colisionarConX'
     * de ese elemento. Idem para los demás elementos. */	
    void colisionarConBombaPlanta(); //muere en el instante.
    void colisionarConBomberman(IOcupante* bomberman);
    void colisionarConEnemigo();
    void colisionarConPlanta();
    /* Mueve el personaje al nuevo casillero. */
    void mover();
    void retroceder();
    bool respawnear();
};

#endif